/**
    函数的重载：规定了函数的调用方式
 */
function add (x: string, y: string): string
function add (x: number, y: number): number

function add(x: string | number, y: string | number): string | number {
    // 在实现上我们要注意严格判断两个参数的类型是否相等，而不能简单的写一个 x + y
    if (typeof x === 'string' && typeof y === 'string') {
        return x + y
    } else if (typeof x === 'number' && typeof y === 'number') {
        return x + y
    }
}

// add(1, 'a')
// add('a', 2)


add(1, 2)
add('a', 'b')